iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 7
0
自我挑戰組

白鬍子老頭30天 Swift Ios系列 第 17

Day(7+10) Lecture 8-2

  • 分享至 

  • xImage
  •  

Multithreading

為了讓使用者有良好的使用者體驗
像是圖太打載入太久卡住,這時我們就需要用到Mutithreading

Queues

先進先出,第一個排隊買票的人,也是第一個從隊伍中取到票離開的。

你會有個任務隊列這些Queues包含著ios的方法,大部分時間這些方法為你加入的Closures
系統把這些Queues跑過一遍把裡面的方法拉出來執行
隊列可以是 serial 一次一個或是 concurrent 同一時間多個

Main Queue

重要的Queue他不會同時運行兩個函數所以他會是個 serial queues
所有的UI活動必須發生在這裡
系統其實一直在背景使用Main Queues
像是 DrawRect

如何使用

   DispatchQueue.global().async {
           //裡面是你要在背景執行的代碼
            if let url = self.ImageURL{
                if let imageData = NSData(contentsOf: url as URL){
                    DispatchQueue.main.async {
           //當完成後切到mainQueues把UI搞出來
                       self.image = UIImage(data: imageData as Data)
                    }
                }
            }
        }

四個優先級

User-interactive : 處理與使用者互動像是UI ,需要回應性的,以及給予回饋的優先層級
User-initiated :需要立即的效果,例如打開一個保存的文檔或當用戶點擊用戶界面的東西執行操作。工作是必需的,以便繼續的用戶交互。集中在響應速度和性能。
Utility : 需要一些時間來完成,並且不需要立即結果,例如下載或導入數據的工作。實用程序任務通常具有進度條是對用戶可見。專注於提供反應性,性能和能量效率之間的平衡。
Background : 其操作在後台和不可見的用戶,例如索引,同步和備份工作。專注於能源效率。

使用 Quality of Service (QoS)
須升級Xcode 8.1 ......

'DispatchQueue.global(qos: .background).async' 

上一篇
Day(7+9) Lecture 8-1
下一篇
Day(7+11) Lecture 8-3 TextField
系列文
白鬍子老頭30天 Swift Ios30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言